// 配置基础URL
const baseURL = 'http://127.0.0.1:5000'

// 请求拦截器
const request = (options) => {
  // 组装完整请求地址
  options.url = baseURL + options.url
  
  // 去掉url中的/api前缀
  options.url = options.url.replace('/api/', '/')
  
  // 获取token
  const token = uni.getStorageSync('token')
  if (token) {
    options.header = {
      ...options.header,
      'Authorization': `Bearer ${token}`
    }
  }
  
  // 如果是文件上传请求
  if (options.url.includes('/upload')) {
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: options.url,
        filePath: options.data.file,
        name: 'file',
        header: {
          'Authorization': token ? `Bearer ${token}` : ''
        },
        formData: {
          type: options.data.type || 'image' // 上传类型: image/video/audio
        },
        success: (res) => {
          if (res.statusCode === 401) {
            handleUnauthorized()
            reject(res)
            return
          }
          // 处理返回的数据
          const data = JSON.parse(res.data)
          if (data.status === 'success') {
            resolve({
              data: {
                status: 'success',
                data: {
                  url: data.data.url
                }
              }
            })
          } else {
            uni.showToast({
              title: data.message || '上传失败',
              icon: 'none'
            })
            reject(data)
          }
        },
        fail: (err) => {
          uni.showToast({
            title: '上传失败',
            icon: 'none'
          })
          reject(err)
        }
      })
    })
  }

  // 发起请求
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      success: (res) => {
        // 未登录或token过期
        if (res.statusCode === 401) {
          handleUnauthorized()
          reject(res)
          return
        }
        resolve(res)
      },
      fail: (err) => {
        uni.showToast({
          title: '请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// 处理未授权的情况
function handleUnauthorized() {
  uni.removeStorageSync('token')
  uni.removeStorageSync('userId')
  uni.removeStorageSync('userInfo')
  uni.showToast({
    title: '请先登录',
    icon: 'none'
  })
  // 跳转到登录页
  setTimeout(() => {
    uni.reLaunch({
      url: '/pages/auth/login'
    })
  }, 1500)
}

export default request 